package com.naiterui.ehp.bs.patient.utils;

import java.util.Arrays;

import com.naiterui.common.redis.RedisUtil;
import com.naiterui.ehp.bp.constants.CommonConstant;

public class VersionUtil {

    public static final String VERSION_APP = "1.0.0";
    public static final String VERSION_H5 = "1.0";

    /**
     * <比较versionName 1.0.0的格式按位比较>
     *
     * @param curVersionName 用户版本
     * @param versionName    系统版本
     *
     * @return boolean <返回值描述:判断系统版本小于>
     *
     * @Throws 异常信息
     * @History 2015-8-13 下午12:17:43 by guoyongxiang
     */
    public static boolean compareVerName(String curVersionName, String versionName) {
        // 比较当前用户版本curVersionName小于系统版本versionName
        return compareVersion(versionName, curVersionName) > 0;
    }


    /**
     * 比较版本大小
     *
     * @param systemVersion 系统版本
     * @param customVersion 用户版本
     *
     * @return 如果系统版本小于用户版本返回-1，如果系统大于用户版本返回1。
     */
    public static int compareVersion(String systemVersion, String customVersion) {
        String[] systemArr = systemVersion.split("\\.");
        String[] customArr = customVersion.split("\\.");
        // 如果用户版本customArr比系统的版本systemArr字符数组长度小，则使用0补充长度至值相同
        if (customArr.length < systemArr.length) {
            String[] newCurArr = new String[systemArr.length];
            Arrays.fill(newCurArr, "0");
            System.arraycopy(customArr, 0, newCurArr, 0, customArr.length);
            customArr = newCurArr;
        } else if (customArr.length > systemArr.length) {
            String[] newSystemArr = new String[customArr.length];
            Arrays.fill(newSystemArr, "0");
            System.arraycopy(systemArr, 0, newSystemArr, 0, systemArr.length);
            systemArr = newSystemArr;
        }
        for (int i = 0; i < systemArr.length; i++) {
            int curVer = Integer.parseInt(systemArr[i]);
            int ver = Integer.parseInt(customArr[i]);
            if (curVer < ver) {
                return -1;
            } else if (curVer > ver) {
                return 1;
            }
        }
        return 0;
    }

    public static boolean compareVerNameAndPlat(String curVersionName, String curPlatform) {
        String checkVerKey = getRedisForceVersionKey(curPlatform);
        // 从缓存中获取默认的升级版本号
        String checkVersion = RedisUtil.valueOps().getString(checkVerKey);
        if (checkVersion == null) {
            checkVersion = VERSION_APP;
        }
        return compareVerName(curVersionName, checkVersion);
    }

    public static String getRedisForceVersionH5Key() {
        return CommonConstant.REDIS_PRE_PT + "ver_force_h5";
    }

    public static String getRedisForceVersionKey(String appPlat) {
        return CommonConstant.REDIS_PRE_PT + "ver_force_" + appPlat;
    }

    public static String getRedisVersionCheckKey(String appPlat) {
        return CommonConstant.REDIS_PRE_PT + "version_check_" + appPlat;
    }

}
